package com.qfedu.provider.sms;

import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;

/**
 * 千锋Java,为你而生！
 *
 * @Author: Feri
 * @Date:2024/11/19 10:54
 * @Modified:
 */
public class AliSmsUtil {
    // 密码找回模板
    public static final String TEM_FCODE = "SMS_302726927";
    // 注册模板
    public static final String TEM_RCODE = "SMS_302726927";
    // 登录模板
    public static final String TEM_LCODE = "SMS_475840072";

    /**
     * 必填，请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
     */
    private static final String SMS_KEY = "LTAI5t5fxYR9iMZ9pWTYPZDt";

    /**
     * 必填，请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
     */
    private static final String SMS_SECRET = "CFKwIORSwWi0c3qjwi8P3JAqTT3pq0";

    /**
     * 阿里云短信客户端对象
     */
    private static Client client;

    static {
        Config config = new Config()
                .setAccessKeyId(SMS_KEY)
                .setAccessKeySecret(SMS_SECRET);
        config.endpoint = "dysmsapi.aliyuncs.com";
        try {
            client = new Client(config);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 发送短信验证码
     *
     * @param template 短信模板
     * @param phone    手机号
     * @param code     验证码
     * @return 是否发送成功
     */
    public static boolean sendCode(String template, String phone, String code) {
        // 1. 创建请求对象
        SendSmsRequest request = new SendSmsRequest()
                .setSignName("社区短信")
                .setTemplateCode(template)
                .setPhoneNumbers(phone)
                .setTemplateParam("{\"code\":\"" + code + "\"}");

        // 2. 执行请求 获取响应
        try {
            SendSmsResponse response = client.sendSmsWithOptions(request, new RuntimeOptions());
            // 正确判断发送是否成功的逻辑应该是检查响应中的状态码是否为"OK"等表示成功的值
            // 这里假设阿里云短信服务成功响应的状态码为"OK"，实际需根据其文档确定准确值
            System.out.println(response.getBody().getCode());

            if ("OK".equals(response.getBody().getCode())) {
                System.out.println(response.getBody().getCode());
                return true;
            } else {
                // 可以在这里打印出具体的错误信息以便排查问题
                System.err.println("短信发送失败，错误码: " + response.getBody().getCode() + ", 错误信息: " + response.getBody().getMessage());
                return false;
            }
        } catch (Exception e) {
            e.printStackTrace();
            // 发生异常也表示发送失败
            return false;
        }
    }
}